﻿'''
题目描述
网络信号经过传递会逐层衰减，且遇到阻隔物无法直接穿透，在此情况下需要计算某个位置的网络信号值。
注意:网络信号可以绕过阻隔物。
array[m][n] 的二维数组代表网格地图，
array[i][j] = 0代表i行j列是空旷位置;
array[i][j] = x(x为正整数)代表i行j列是信号源，信号强度是x;
array[i][j] = -1代表i行j列是阻隔物。
信号源只有1个，阻隔物可能有0个或多个
网络信号衰减是上下左右相邻的网格衰减1
现要求输出对应位置的网络信号值。
输入描述
输入为三行，
第一行为 m 、n ，代表输入是一个 m × n 的数组。
第二行是一串 m × n 个用空格分隔的整数。每连续 n 个数代表一行，再往后 n 个代表下一行，以此类推。对应的值代表对应的网格是
空旷位置，还是信号源，还是阻隔物。
第三行是 i 、 j，代表需要计算array[i][j]的网络信号值。
注意：此处 i 和 j 均从 0 开始，即第一行 i 为 0。
6 5  
0 0 0 -1 0 0 0 0 0 0 0 0 -1 4 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0
1 4
代表如下地图
需要输出第1行第4列的网络信号值，值为2。
输出描述
输出对应位置的网络信号值，如果网络信号未覆盖到，也输出0。
一个网格如果可以途径不同的传播衰减路径传达，取较大的值作为其信号值。
示例1
输入
6 5
0 0 0 -1 0 0 0 0 0 0 0 0 -1 4 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0
1 4
输出
2
示例2
输入
6 5
0 0 0 -1 0 0 0 0 0 0 0 0 -1 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 1
输出
0
说明
解题思路
在用例1中。有一个信号源：
需要求的是（1，4）位置的强度，请注意行列是从0开始的。
根据衰减原理，最后的结果是2
这道题可以使用广度优先搜索（BFS）来解决。我们可以先找到信号源的位置，将其加入队列中，然后不断从队列中取出位置，向四个方
向传播信号，如果某个位置的信号强度为 0，则说明可以传播到该位置，将其加入队列，并将其信号强度设为当前位置的信号强度减 1。
当某个位置的信号强度为 1 时，说明不需要再传播了，后面的位置肯定都是 0。
'''
#读取输入
m,n = map(int,input().split())
sign_map = list(map(int,input().split()))
pos = list(map(int,input().split()))
#广度优先，使用队列，列表模拟队列
#初始化队列，加入所有信号源，本题只有一个
#注意确定信号源坐标位置：乘以每列数量即i * n + j
sign_queue = [[i,j] for i in range(m) for j in range(n) if sign_map[i * n + j] > 0]
#定义四个方向的偏移量
directions = [[0,1],[0,-1],[1,0],[-1,0]]

#开始广度优先搜索
while sign_queue:
    current_queue = []
    for i,j in sign_queue:
        #四周信号强度要衰减1
        new_sign = sign_map[i * n + j] - 1
        #遍历四个方向，更新信号强度
        for dire in directions:
            new_i = i + dire[0]
            new_j = j + dire[1]
            #坐标未越界，并且不是障碍物，则更新信号强度并加入队列
            if new_i >= 0 and new_i < m and new_j >= 0 and new_j < n and sign_map[new_i * n + new_j] == 0:
                current_queue.append([new_i,new_j])
                sign_map[new_i * n + new_j] = new_sign
    #更新信号队列
    sign_queue = current_queue
print(max(0,sign_map[pos[0] * n + pos[1]]))

